home *** CD-ROM | disk | FTP | other *** search
/ Dynamic HTML Construction Kit / Dynamic HTML Construction Kit.iso / earthlink / nscomm / java40.jar / java / text / DigitList.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-11-03  |  2.6 KB  |  198 lines

  1. package java.text;
  2.  
  3. final class DigitList implements Cloneable {
  4.    public static final int MAX_COUNT = 19;
  5.    public int decimalAt;
  6.    public int count;
  7.    public byte[] digits = new byte[19];
  8.  
  9.    public void clear() {
  10.       this.decimalAt = 0;
  11.       this.count = 0;
  12.    }
  13.  
  14.    public void append(int var1) {
  15.       if (this.count < 19) {
  16.          this.digits[this.count] = (byte)var1;
  17.       }
  18.  
  19.       ++this.count;
  20.    }
  21.  
  22.    public final double getDouble() {
  23.       StringBuffer var1 = new StringBuffer(this.count);
  24.       if (this.count > 19) {
  25.          this.count = 19;
  26.       }
  27.  
  28.       for(int var2 = 0; var2 < this.count; ++var2) {
  29.          var1.append((char)this.digits[var2]);
  30.       }
  31.  
  32.       long var3 = Long.parseLong(var1.toString());
  33.       return (double)var3 * Math.pow((double)10.0F, (double)(this.decimalAt - this.count));
  34.    }
  35.  
  36.    public final long getLong() {
  37.       StringBuffer var1 = new StringBuffer(this.count);
  38.  
  39.       for(int var2 = 0; var2 < this.count; ++var2) {
  40.          var1.append((char)this.digits[var2]);
  41.       }
  42.  
  43.       return Long.parseLong(var1.toString());
  44.    }
  45.  
  46.    private int fixNumber(double var1, StringBuffer var3, int var4) {
  47.       int var5 = 0;
  48.       double var6 = (double)0.0F;
  49.       double var8 = (double)0.0F;
  50.       int var10 = 0;
  51.       double var11 = var1;
  52.       var6 = Math.log(var1);
  53.       var8 = Math.log((double)10.0F);
  54.       double var13 = var6 / var8;
  55.  
  56.       for(var5 = (int)(var13 - (double)19.0F); var11 > (double)Long.MAX_VALUE; ++var10) {
  57.          var11 /= (double)10.0F;
  58.       }
  59.  
  60.       String var15 = Long.toString((long)var11);
  61.  
  62.       int var16;
  63.       for(var16 = var15.length() - 1; var16 >= 0 && var15.charAt(var16) == '0'; --var16) {
  64.       }
  65.  
  66.       for(int var17 = 0; var17 < var16 + 1; ++var17) {
  67.          var3.append(var15.charAt(var17));
  68.          this.digits[var17] = (byte)var15.charAt(var17);
  69.       }
  70.  
  71.       this.decimalAt = (int)((double)(var10 - var5) + var13 - (double)var4);
  72.       return var16 + 1;
  73.    }
  74.  
  75.    public final void set(double var1, int var3) {
  76.       int var4 = 0;
  77.       double var5 = var1 * Math.pow((double)10.0F, (double)var3);
  78.       long var7 = (long)var5;
  79.       boolean var9 = false;
  80.       StringBuffer var10 = new StringBuffer(19);
  81.       if (var7 < 0L) {
  82.          this.count = this.fixNumber(var5, var10, var3);
  83.          var9 = true;
  84.       }
  85.  
  86.       if (!var9) {
  87.          var10.append(Long.toString(var7));
  88.  
  89.          while(var7 > 0L && (double)var7 < Math.pow((double)10.0F, (double)(var3 - 1))) {
  90.             var10.insert(0, '0');
  91.             var7 *= 10L;
  92.          }
  93.  
  94.          for(var4 = var10.length() - 1; var4 >= 0 && var10.charAt(var4) == '0'; --var4) {
  95.             --var3;
  96.          }
  97.  
  98.          this.count = var4 + 1;
  99.  
  100.          for(int var11 = 0; var11 < this.count; ++var11) {
  101.             this.digits[var11] = (byte)var10.charAt(var11);
  102.          }
  103.  
  104.          this.decimalAt = this.count - var3;
  105.       }
  106.  
  107.       if (this.decimalAt < 0) {
  108.          this.decimalAt = 0;
  109.       }
  110.  
  111.    }
  112.  
  113.    public final void set(long var1) {
  114.       String var8;
  115.       if (var1 == Long.MIN_VALUE) {
  116.          var1 = -(var1 + 1L);
  117.          var8 = Long.toString(var1).substring(0, 18);
  118.          char var4 = Long.toString(var1).charAt(18);
  119.          long var5 = (long)(Character.digit(var4, 10) + 1);
  120.          if (var5 > 9L) {
  121.             throw new InternalError("Internal NumberFormat error!");
  122.          }
  123.  
  124.          var8 = var8 + Long.toString(var5);
  125.       } else {
  126.          var8 = Long.toString(var1);
  127.       }
  128.  
  129.       if (var8.length() > 19) {
  130.          var8 = var8.substring(0, 19);
  131.       }
  132.  
  133.       int var10 = 0;
  134.  
  135.       int var9;
  136.       for(var9 = var8.length() - 1; var9 >= 0 && var8.charAt(var9) == '0'; --var9) {
  137.          --var10;
  138.       }
  139.  
  140.       this.count = var9 + 1;
  141.  
  142.       for(int var6 = 0; var6 < this.count; ++var6) {
  143.          this.digits[var6] = (byte)var8.charAt(var6);
  144.       }
  145.  
  146.       this.decimalAt = this.count - var10;
  147.       if (this.decimalAt < 0) {
  148.          this.decimalAt = 0;
  149.       }
  150.  
  151.    }
  152.  
  153.    public Object clone() {
  154.       try {
  155.          return (DigitList)super.clone();
  156.       } catch (CloneNotSupportedException var1) {
  157.          throw new InternalError();
  158.       }
  159.    }
  160.  
  161.    public boolean equals(Object var1) {
  162.       if (this == var1) {
  163.          return true;
  164.       } else if (!(var1 instanceof DigitList)) {
  165.          return false;
  166.       } else {
  167.          DigitList var2 = (DigitList)var1;
  168.          if (this.hashCode() != var2.hashCode()) {
  169.             return false;
  170.          } else if (this.count != var2.count) {
  171.             return false;
  172.          } else if (this.digits.length != var2.digits.length) {
  173.             return false;
  174.          } else {
  175.             for(int var3 = 0; var3 < this.digits.length; ++var3) {
  176.                if (this.digits[var3] != var2.digits[var3]) {
  177.                   return false;
  178.                }
  179.             }
  180.  
  181.             return this.decimalAt == var2.decimalAt;
  182.          }
  183.       }
  184.    }
  185.  
  186.    public int hashCode() {
  187.       int var1 = 0;
  188.  
  189.       for(int var2 = 0; var2 < this.digits.length; ++var2) {
  190.          short var3 = (short)(this.digits[var2] >> 16);
  191.          short var4 = (short)this.digits[var2];
  192.          var1 ^= var3 ^ var4;
  193.       }
  194.  
  195.       return var1;
  196.    }
  197. }
  198.